-- @owner: xue-xinyi610
-- @date: 2025/2/20
-- @testpoint: I8XDZ2 新增功能，创建100个触发器，全部启用，最后插入数据。，触发器均执行。。

-- 步骤pre1 清理旧对象
DROP TABLE IF EXISTS test_table;
DROP TABLE IF EXISTS trigger_log;
DROP FUNCTION IF EXISTS trigger_handler;

-- 步骤pre2 创建测试表
CREATE TABLE test_table (id1 INT PRIMARY KEY, id2 INT);
CREATE TABLE trigger_log (trigger_name TEXT, exec_time TIMESTAMP);

-- 步骤pre3 创建通用触发器函数
CREATE OR REPLACE FUNCTION trigger_handler() RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO trigger_log VALUES (TG_NAME, NOW());
  RETURN NEW;
END;
$$ LANGUAGE PLPGSQL;/

-- 步骤pre4 批量创建100个触发器
BEGIN
  FOR i IN 1..100 LOOP
    EXECUTE format('CREATE TRIGGER tg_%s BEFORE INSERT ON test_table EXECUTE PROCEDURE trigger_handler()', i);
  END LOOP;
END;/

-- 步骤test1 启用全部触发器
ALTER TABLE test_table ENABLE TRIGGER ALL;

-- 步骤test2 触发测试
INSERT INTO test_table VALUES (1, 0);

-- 验证结果
SELECT COUNT(*) AS triggered_count FROM trigger_log; -- 预期返回100

-- 步骤post 清理对象
BEGIN
  FOR i IN 1..100 LOOP
    EXECUTE format('DROP TRIGGER tg_%s ON test_table', i);
  END LOOP;
END ;/
DROP FUNCTION trigger_handler;
DROP TABLE test_table, trigger_log;
